package com.godofgamblers.hotelmanagementsystem.service;

import com.godofgamblers.hotelmanagementsystem.dto.TimeAndRoomTypeId;
import com.godofgamblers.hotelmanagementsystem.pojo.Order;
import com.godofgamblers.hotelmanagementsystem.pojo.Order_item;
import com.godofgamblers.hotelmanagementsystem.pojo.Pay_success;
import com.godofgamblers.hotelmanagementsystem.pojo.User;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author wzx
 * @date 2019/10/14 - 14:00
 */
public interface OrderService {
    //用户点击创建订单往订单表中插入数据
    public void insertOrder(Order order);

    //根据room_type_id查询该类房间的库存
    public Integer findStock(Integer room_type_id);

    //通过order_num查询order_id
    public Integer findOrderByOrderNum(String order_num);

    //传入订单号，查询对应的订单状态是多少
    public Integer findOrderState(String order_num);

    //若15分钟倒计时结束后还没有支付，则代表该笔订单已失效，修改对应状态(参数：订单号)
    public void updateOrderState(String order_num);


    //根据room_type_id查询房间类型名字
    public String findRoomTypeName(Integer room_type_id);

    //支付成功后传入订单编号，将该笔订单的支付号插入，订单状态改变（封装一个对象传入）
    public void insertDelNum(Pay_success paySuccess);



    //传入入住时间,退房时间，房间类型，查询到该时间内所有的订单项（判断房间被订出去多少间了）
    public List<Order_item> findnewStock(TimeAndRoomTypeId timeAndRoomTypeId);

    //传入订单号，将对应的订单状态修改为2，已取消
    public void changeOrderState(String order_num);

    //传入用户，查询到该用户的钱包余额
    public BigDecimal findUserWallet(User user);

    //传入用户对象，将金额修改为支付后的金额
    public void updateUserWallet(User user);

    //钱包支付成功后传入订单编号，将该笔订单的支付号插入，订单状态改变（封装一个对象传入）
    public void updateStateWallet(String order_num);

    //钱包支付失败，将该订单删除
    public void updateOrderFlag(String order_num);



    /**
     * 线上预定支付
     * @param order 订单pojo类
     * @return String
     */
    public String onlineBookingPay(Order order,Order_item order_item);


}
